﻿using System;
using System.Collections.Generic;
using System.Data.Entity;
using Iacym.Entities;
using System.Data.OleDb;
using System.Data.Common;
using System.Data.SqlClient;

namespace Iacym.Repository
{
    public class IacymDatabaseInitializer : DropCreateDatabaseAlways<IACYMCONTEXT>
    {
        protected override void Seed(IACYMCONTEXT context)
        {
            if (context == null)
                throw new ArgumentNullException("context");
            GetRol().ForEach(p => context.ROLs.Add(p));
            GetPersona().ForEach(p => context.PERSONAs.Add(p));
            GetEstadoCivil().ForEach(p => context.ESTADO_CIVIL.Add(p));
            GetSexo().ForEach(p => context.SEXOes.Add(p));
            GetIglesia().ForEach(p => context.IGLESIAs.Add(p));
            GetProcedencia().ForEach(p => context.PROCEDENCIAs.Add(p));
            GetTipoMoneda().ForEach(p => context.TIPO_MONEDA.Add(p));
            GetTipoOfrenda().ForEach(p => context.TIPO_OFRENDA.Add(p));
            GetTipoPago().ForEach(p => context.TIPO_PAGO.Add(p));
            GetTipoReunion().ForEach(p => context.TIPO_REUNION.Add(p));
            GetLineaTelefonica().ForEach(p => context.LINEA_TELEFONICA.Add(p));
            GetIdioma().ForEach(p => context.IDIOMAS.Add(p));
            GetProfesion().ForEach(p => context.PROFESIONs.Add(p));
            GetEspecialidad().ForEach(p => context.ESPECIALIDADs.Add(p));
            GetEmpresa().ForEach(p => context.EMPRESAs.Add(p));
            GetCargo().ForEach(p => context.CARGOes.Add(p));
            IngresarUbigeo();
            CargaMenu();
        }

        static List<ROL> GetRol()
        {
            var roles = new List<ROL>
            {
                new ROL {Descripcion = "Pastor".ToUpper()},
                new ROL {Descripcion = "Administrador".ToUpper()},
                new ROL {Descripcion = "Tesorero".ToUpper()},
                new ROL {Descripcion = "Contador".ToUpper()}
            };
            return roles;
        }

        static List<PERSONA> GetPersona()
        {
            var persona = new List<PERSONA>
            {
                new PERSONA
                { 
                    NroMembresia = 0,
                    Dni = "00000000".ToUpper(),
                    ApePaterno = "No".ToUpper(),
                    ApeMaterno = "No".ToUpper(),
                    Nombres = "No".ToUpper(),
                    FechaNacimiento = Convert.ToDateTime("01/01/01"),
                    Direccion = "No".ToUpper(),
                    Email = "No".ToUpper(),
                    //FechaBautizo = " ",
                    //FechaConversion = " ",
                    //FechaMuerte = " ",
                    //FechaTransferencia = " ",

                    //USUARIO = new USUARIO
                    //{
                    //    PersonaId = 1,
                    //    Numero = 1,
                    //    ROL = new ROL
                    //    {
                    //        Descripcion = "Miembro".ToUpper()
                    //    },
                    //    RolId = 1,
                    //    Password = "e10adc3949ba59abbe56e057f20f883e".ToUpper()
                    //},

                    FOTO_PERSONA = new FOTO_PERSONA
                    {
                        PersonaId = 1
                    },
                    
                    
                    ESTADO_CIVIL = new ESTADO_CIVIL
                    {
                        Descripcion = "Soltero(a)".ToUpper()
                    },

                    UBIGEO = new UBIGEO
                    {
                        IdUbigeo = "000000",
                        Departamento = "No".ToUpper(),
                        Provincia = "No".ToUpper(),
                        Distrito = "No".ToUpper()
                    },

                    SEXO = new SEXO
                    {
                        Descripcion = "Femenino".ToUpper()
                    },

                    DiscipuladorId = 1,

                    CELULA = new CELULA
                    {
                        Descripcion = "No Asiste".ToUpper(),
                        MINISTERIO = new MINISTERIO
                        {
                            Descripcion = "No Asiste".ToUpper()
                        }
                    },

                    Estado = false,
                    
                    Observacion = "No".ToUpper(),
                    Muerte = false,
                    Local = false,
                    Transferido = false,
                    Transferencia = false,
                    NoCreyente = true,
                    IGLESIA = new IGLESIA
                    {
                        Descripcion = "No Asiste".ToUpper(),
                        PROCEDENCIA = new PROCEDENCIA
                        {
                            Descripcion = "No Asiste".ToUpper() 
                        }
                    }
                }
            };

            return persona;
        }

        static List<ESTADO_CIVIL> GetEstadoCivil()
        {
            var estadosCiviles = new List<ESTADO_CIVIL>
            {
                new ESTADO_CIVIL {Descripcion = "Casado(a)".ToUpper()},
                new ESTADO_CIVIL {Descripcion = "Divorciado(a)".ToUpper()},
                new ESTADO_CIVIL {Descripcion = "Viudo(a)".ToUpper()},
                new ESTADO_CIVIL {Descripcion = "Separado(a)".ToUpper()},
                new ESTADO_CIVIL {Descripcion = "Conviviente".ToUpper()}
            };
            return estadosCiviles;
        }

        static List<PROFESION> GetProfesion()
        {
            var profesiones = new List<PROFESION>
            {
                new PROFESION {Descripcion = "No Tiene".ToUpper()},
                new PROFESION {Descripcion = "Ingenieria Agronoma".ToUpper()},
                new PROFESION {Descripcion = "Ingenieria Ambiental".ToUpper()},
                new PROFESION {Descripcion = "Ingenieria Civil".ToUpper()},
                new PROFESION {Descripcion = "Ingenieria de Industrias Alimentarias".ToUpper()},
                new PROFESION {Descripcion = "Ingenieria de Sistemas".ToUpper()},
                new PROFESION {Descripcion = "Administracion".ToUpper()},
                new PROFESION {Descripcion = "Medicina".ToUpper()},
                new PROFESION {Descripcion = "Medicina Veterinaria".ToUpper()},
                new PROFESION {Descripcion = "Psicologia".ToUpper()},
                new PROFESION {Descripcion = "Sociologia".ToUpper()},
                new PROFESION {Descripcion = "Docencia".ToUpper()},
                new PROFESION {Descripcion = "Arquitectura".ToUpper()},
                new PROFESION {Descripcion = "Ingenieria Industrial".ToUpper()},
                new PROFESION {Descripcion = "Obstetricia".ToUpper()},
                new PROFESION {Descripcion = "Odontologia".ToUpper()}

            };
            return profesiones;
        }

        static List<ESPECIALIDAD> GetEspecialidad()
        {
            var especialidad = new List<ESPECIALIDAD>
            {
                new ESPECIALIDAD {Descripcion = "No Tiene".ToUpper()},
                new ESPECIALIDAD {Descripcion = "Carpintero".ToUpper()},
                new ESPECIALIDAD {Descripcion = "Herrero".ToUpper()},
                new ESPECIALIDAD {Descripcion = "Cocinero".ToUpper()},
            };
            return especialidad;
        }

        static List<EMPRESA> GetEmpresa()
        {
            var empresa = new List<EMPRESA>
            {
                new EMPRESA {Descripcion = "Iglesia Alianza Cristiana y Misionera del Peru".ToUpper()},
                new EMPRESA {Descripcion = "Minera Yanacocha SRL".ToUpper()},
                new EMPRESA {Descripcion = "Municipalidad Provincial de Cajamarca".ToUpper()},
                new EMPRESA {Descripcion = "Libreria Prisa".ToUpper()},
                new EMPRESA {Descripcion = "Ceyca Servicios Generales y Construccion SAC".ToUpper()}
                
            };
            return empresa;
        }


        static List<IDIOMA> GetIdioma()
        {
            var idiomas = new List<IDIOMA>
            {
                new IDIOMA {Descripcion = "Español".ToUpper()},
                new IDIOMA {Descripcion = "Ingles".ToUpper()},
                new IDIOMA {Descripcion = "Frances".ToUpper()},
                new IDIOMA {Descripcion = "Portugues".ToUpper()}
            };
            return idiomas;
        }

        static List<SEXO> GetSexo()
        {
            var sexo = new List<SEXO>
            {
                new SEXO { Descripcion = "Masculino".ToUpper() }
            };

            return sexo;
        }

        static List<CARGO> GetCargo()
        {
            var cargo = new List<CARGO>
            {
                new CARGO { Descripcion = "Administrador".ToUpper() },
                new CARGO { Descripcion = "Jefe de Proyectos".ToUpper() },
                new CARGO { Descripcion = "Jefe de Recursos Humanos".ToUpper() },
                new CARGO { Descripcion = "Gerente General".ToUpper() }
            };

            return cargo;
        }
        
        static List<PROCEDENCIA> GetProcedencia()
        {
            var procedencia = new List<PROCEDENCIA>
            {
                new PROCEDENCIA { Descripcion = "Trujillo".ToUpper() },
                new PROCEDENCIA { Descripcion = "Lima".ToUpper() },
            };

            return procedencia;
        }

        static List<IGLESIA> GetIglesia()
        {
            var iglesia = new List<IGLESIA>
            {
                new IGLESIA 
                { 
                    Descripcion = "Iglesia Alianza Crisitana y Misionera".ToUpper(),
                    PROCEDENCIA = new PROCEDENCIA
                    {
                        Descripcion = "Cajamarca".ToUpper() 
                    }

                },

                new IGLESIA 
                { 
                    Descripcion = "Iglesia Alianza Crisitana y Misionera".ToUpper(),
                    PROCEDENCIA = new PROCEDENCIA
                    {
                        Descripcion = "Tacna".ToUpper() 
                    }

                }      
            };

            return iglesia;
        }

        

        static List<TIPO_MONEDA> GetTipoMoneda()
        {
            var tipomon = new List<TIPO_MONEDA>
            {
                new TIPO_MONEDA { Descripcion = "Soles".ToUpper() },
                new TIPO_MONEDA { Descripcion = "Dolares".ToUpper() },
                new TIPO_MONEDA { Descripcion = "Euros".ToUpper() }
            };

            return tipomon;
        }

        static List<TIPO_OFRENDA> GetTipoOfrenda()
        {
            var tipoof = new List<TIPO_OFRENDA>
            {
                new TIPO_OFRENDA { Descripcion = "Diezmo".ToUpper() },
                new TIPO_OFRENDA { Descripcion = "Pro-Templo".ToUpper() }
            };

            return tipoof;
        }

        static List<TIPO_REUNION> GetTipoReunion()
        {
            var tiporeu = new List<TIPO_REUNION>
            {
                new TIPO_REUNION { Descripcion = "Culto de Miercoles".ToUpper() }
            };

            return tiporeu;
        }

        static List<LINEA_TELEFONICA> GetLineaTelefonica()
        {
            var linea = new List<LINEA_TELEFONICA>
            {
                new LINEA_TELEFONICA { Descripcion = "Claro".ToUpper() },
                new LINEA_TELEFONICA { Descripcion = "Rpc".ToUpper() },
                new LINEA_TELEFONICA { Descripcion = "Movistar".ToUpper() },
                new LINEA_TELEFONICA { Descripcion = "Rpm".ToUpper() },
                new LINEA_TELEFONICA { Descripcion = "Nextel".ToUpper() },
                new LINEA_TELEFONICA { Descripcion = "Fijo".ToUpper() },
                
            };

            return linea;
        }

        static List<TIPO_PAGO> GetTipoPago()
        {
            var tipopag = new List<TIPO_PAGO>
            {
                new TIPO_PAGO { Descripcion = "Contado".ToUpper() },
                new TIPO_PAGO { Descripcion = "Deposito".ToUpper() }
            };

            return tipopag;
        }

        public void IngresarUbigeo()
        {
            //Create connection string to Excel work book
            string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source='D:\Giank\AIP System\PROYECTOS\IACYM\ubigeo.xls'; Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"; //Office 2003-2007
            //string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source='C:\Data.xlsx'; Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"; // Office 2010-2012

            using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
            {
                OleDbCommand command = new OleDbCommand("SELECT `Hoja1$`.IdUbigeo, `Hoja1$`.Departamento, `Hoja1$`.Provincia, `Hoja1$`.Distrito FROM `Hoja1$`", connection);

                connection.Open();

                // Create DbDataReader to Data Worksheet
                using (DbDataReader dr = command.ExecuteReader())
                {
                    // SQL Server Connection String
                    string sqlConnectionString = "Data Source=.;Initial Catalog=IACYM;Integrated Security=True";

                    // Bulk Copy to SQL Server
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString, SqlBulkCopyOptions.TableLock))
                    {
                        bulkCopy.ColumnMappings.Add("IdUbigeo", "IdUbigeo");
                        bulkCopy.ColumnMappings.Add("Departamento", "Departamento");
                        bulkCopy.ColumnMappings.Add("Provincia", "Provincia");
                        bulkCopy.ColumnMappings.Add("Distrito", "Distrito");
                        bulkCopy.DestinationTableName = "UBIGEO";
                        bulkCopy.WriteToServer(dr);
                    }
                }
            }
        }

        public void CargaMenu()
        {
            string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source='D:\Giank\AIP System\PROYECTOS\IACYM\Menu.xls'; Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"; //Office 2003-2007
            //string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source='C:\Data.xlsx'; Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"; // Office 2010-2012

            using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
            {
                OleDbCommand command = new OleDbCommand("SELECT `Hoja1$`.Descripcion, `Hoja1$`.Tag, `Hoja1$`.Comentario FROM `Hoja1$`", connection);

                connection.Open();

                // Create DbDataReader to Data Worksheet
                using (DbDataReader dr = command.ExecuteReader())
                {
                    // SQL Server Connection String
                    string sqlConnectionString = "Data Source=.;Initial Catalog=IACYM;Integrated Security=True";

                    // Bulk Copy to SQL Server
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString, SqlBulkCopyOptions.TableLock))
                    {
                        bulkCopy.ColumnMappings.Add("Descripcion", "Descripcion");
                        bulkCopy.ColumnMappings.Add("Tag", "Tag");
                        bulkCopy.ColumnMappings.Add("Comentario", "Comentario");
                        bulkCopy.DestinationTableName = "MENU";
                        bulkCopy.WriteToServer(dr);
                    }
                }
            }
        }
    }
}


